home *** CD-ROM | disk | FTP | other *** search
- /*
- * FIG : Facility for Interactive Generation of figures
- * Copyright (c) 1985 by Supoj Sutanthavibul
- * Parts Copyright (c) 1994 by Brian V. Smith
- * Parts Copyright (c) 1991 by Paul King
- *
- * The X Consortium, and any party obtaining a copy of these files from
- * the X Consortium, directly or indirectly, is granted, free of charge, a
- * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
- * nonexclusive right and license to deal in this software and
- * documentation files (the "Software"), including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons who receive
- * copies from any such party to do so, with the only requirement being
- * that this copyright notice remain intact. This license includes without
- * limitation a license to do the foregoing actions under any patents of
- * the party supplying this software to the X Consortium.
- */
-
- /* This file has been modified for use with Gnuplot 3.6 by
- * Ian MacPhedran.
- */
-
- /* DEFAULT is used for many things - font, color etc */
-
- #define DEFAULT (-1)
- #define SOLID_LINE 0
- #define DASH_LINE 1
- #define DOTTED_LINE 2
- #define RUBBER_LINE 3
- #define PANEL_LINE 4
-
- #define Color int
-
- #define BLACK 0
- #define BLUE 1
- #define GREEN 2
- #define CYAN 3
- #define RED 4
- #define MAGENTA 5
- #define YELLOW 6
- #define WHITE 7
-
- /** VERY IMPORTANT: The f_line, f_spline and f_arc objects all must have the
- components up to and including the arrows in the same order.
- This is for the get/put_generic_arrows() in e_edit.c.
- **/
-
- typedef struct f_point {
- int x, y;
- }
- F_point;
-
- typedef struct f_pos {
- int x, y;
- }
- F_pos;
-
- #define DEF_ARROW_WID (4 * ZOOM_FACTOR)
- #define DEF_ARROW_HT (8 * ZOOM_FACTOR)
-
- typedef struct f_arrow {
- int type;
- int style;
- float thickness;
- float wid;
- float ht;
- }
- F_arrow;
-
- typedef struct f_ellipse {
- int tagged;
- int distrib;
- int type;
- #define T_ELLIPSE_BY_RAD 1
- #define T_ELLIPSE_BY_DIA 2
- #define T_CIRCLE_BY_RAD 3
- #define T_CIRCLE_BY_DIA 4
- int style;
- int thickness;
- Color pen_color;
- Color fill_color;
- int fill_style;
- int depth;
- float style_val;
- int pen_style;
- float angle;
- int direction;
- #define UNFILLED -1
- struct f_pos center;
- struct f_pos radiuses;
- struct f_pos start;
- struct f_pos end;
- struct f_ellipse *next;
- }
- F_ellipse;
-
- /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_arc STRUCTURE */
-
- typedef struct f_arc {
- int tagged;
- int distrib;
- int type;
- /* note: these arc types are the internal values */
- /* in the file, they are open=1, wedge=2 */
- #define T_OPEN_ARC 0
- #define T_PIE_WEDGE_ARC 1
- int style;
- int thickness;
- Color pen_color;
- Color fill_color;
- int fill_style;
- int depth;
- int pen_style;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
- int cap_style;
- float style_val;
- int direction;
- struct {
- float x, y;
- } center;
- struct f_pos point[3];
- struct f_arc *next;
- }
- F_arc;
-
- #define CLOSED_PATH 0
- #define OPEN_PATH 1
- #define DEF_BOXRADIUS 7
- #define DEF_DASHLENGTH 4
- #define DEF_DOTGAP 3
-
- typedef struct f_pic {
- #ifndef PATH_MAX
- #define PATH_MAX 128
- #endif
- char file[PATH_MAX];
- int subtype;
- #define T_PIC_EPS 1
- #define T_PIC_BITMAP 2
- #define T_PIC_PIXMAP 3
- #define T_PIC_GIF 4
- #define FileInvalid -2
- int flipped;
- unsigned char *bitmap;
- /* struct Cmap cmap[MAXCOLORMAPSIZE]; /* for GIF/XPM files */
- int numcols; /* number of colors in cmap */
- float hw_ratio;
- int size_x, size_y; /* fig units */
- struct f_pos bit_size; /* pixels */
- Color color; /* only used for XBM */
- /* Pixmap pixmap; /* pixmap created for canvas */
- int pix_rotation, pix_width, pix_height, pix_flipped;
- }
- F_pic;
-
- extern char EMPTY_PIC[];
-
- /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_line STRUCTURE */
-
- typedef struct f_line {
- int tagged;
- int distrib;
- int type;
- #define T_POLYLINE 1
- #define T_BOX 2
- #define T_POLYGON 3
- #define T_ARC_BOX 4
- #define T_PIC_BOX 5
- int style;
- int thickness;
- Color pen_color;
- Color fill_color;
- int fill_style;
- int depth;
- int pen_style;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
- int cap_style; /* line cap style - Butt, Round, Bevel */
- #define CAP_BUTT 0
- #define CAP_ROUND 1
- #define CAP_PROJECT 2
- struct f_point *points; /* this must immediately follow cap_style */
- int join_style; /* join style - Miter, Round, Bevel */
- #define JOIN_MITER 0
- #define JOIN_ROUND 1
- #define JOIN_BEVEL 2
- float style_val;
- int radius; /* corner radius for T_ARC_BOX */
- struct f_pic *pic;
- struct f_line *next;
- }
- F_line;
-
- typedef struct f_text {
- int tagged;
- int distrib;
- int type;
- #define T_LEFT_JUSTIFIED 0
- #define T_CENTER_JUSTIFIED 1
- #define T_RIGHT_JUSTIFIED 2
- int font;
- /* PIX_FONT fontstruct; */
- int size; /* point size */
- Color color;
- int depth;
- float angle; /* in radians */
-
- int flags;
- #define RIGID_TEXT 1
- #define SPECIAL_TEXT 2
- #define PSFONT_TEXT 4
- #define HIDDEN_TEXT 8
-
- int ascent; /* Fig units */
- int length; /* Fig units */
- int descent; /* from XTextExtents(), not in file */
- int base_x;
- int base_y;
- int pen_style;
- char *cstring;
- struct f_text *next;
- }
- F_text;
-
- #define MAXFONT(T) (psfont_text(T) ? NUM_FONTS : NUM_LATEX_FONTS)
-
- #define rigid_text(t) \
- (t->flags == DEFAULT \
- || (t->flags & RIGID_TEXT))
-
- #define special_text(t) \
- ((t->flags != DEFAULT \
- && (t->flags & SPECIAL_TEXT)))
-
- #define psfont_text(t) \
- (t->flags != DEFAULT \
- && (t->flags & PSFONT_TEXT))
-
- #define hidden_text(t) \
- (t->flags != DEFAULT \
- && (t->flags & HIDDEN_TEXT))
-
- #define text_length(t) \
- (hidden_text(t) ? hidden_text_length : t->length)
-
- #define using_ps (cur_textflags & PSFONT_TEXT)
-
- typedef struct f_control {
- float lx, ly, rx, ry;
- struct f_control *next;
- }
- F_control;
-
- /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_spline STRUCTURE */
-
- #define int_spline(s) (s->type & 0x2)
- #define normal_spline(s) (!(s->type & 0x2))
- #define closed_spline(s) (s->type & 0x1)
- #define open_spline(s) (!(s->type & 0x1))
-
- typedef struct f_spline {
- int tagged;
- int distrib;
- int type;
- #define T_OPEN_NORMAL 0
- #define T_CLOSED_NORMAL 1
- #define T_OPEN_INTERP 2
- #define T_CLOSED_INTERP 3
- int style;
- int thickness;
- Color pen_color;
- Color fill_color;
- int fill_style;
- int depth;
- int pen_style;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
- int cap_style;
- /*
- * For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while
- * they are knots for T_OPEN_INTERP and T_CLOSED_INTERP whose control
- * points are stored in controls.
- */
- struct f_point *points; /* this must immediately follow cap_style */
- float style_val;
- struct f_control *controls;
- struct f_spline *next;
- }
- F_spline;
-
- typedef struct f_compound {
- int tagged;
- int distrib;
- struct f_pos nwcorner;
- struct f_pos secorner;
- struct f_line *lines;
- struct f_ellipse *ellipses;
- struct f_spline *splines;
- struct f_text *texts;
- struct f_arc *arcs;
- struct f_compound *compounds;
- struct f_compound *next;
- }
- F_compound;
-
- typedef struct f_linkinfo {
- struct f_line *line;
- struct f_point *endpt;
- struct f_point *prevpt;
- int two_pts;
- struct f_linkinfo *next;
- }
- F_linkinfo;
-
- /* separate the "type" and the "style" from the cur_arrowtype */
- #define ARROW_TYPE(x) ((x)==0? 0 : ((x)+1)/2)
- #define ARROW_STYLE(x) ((x)==0? 0 : ((x)+1)%2)
-
- #define ARROW_SIZE sizeof(struct f_arrow)
- #define POINT_SIZE sizeof(struct f_point)
- #define CONTROL_SIZE sizeof(struct f_control)
- #define ELLOBJ_SIZE sizeof(struct f_ellipse)
- #define ARCOBJ_SIZE sizeof(struct f_arc)
- #define LINOBJ_SIZE sizeof(struct f_line)
- #define TEXOBJ_SIZE sizeof(struct f_text)
- #define SPLOBJ_SIZE sizeof(struct f_spline)
- #define COMOBJ_SIZE sizeof(struct f_compound)
- #define PIC_SIZE sizeof(struct f_pic)
- #define LINKINFO_SIZE sizeof(struct f_linkinfo)
-
- /********************** object codes **********************/
-
- #define O_COLOR_DEF 0
- #define O_ELLIPSE 1
- #define O_POLYLINE 2
- #define O_SPLINE 3
- #define O_TEXT 4
- #define O_ARC 5
- #define O_COMPOUND 6
- #define O_END_COMPOUND -O_COMPOUND
- #define O_ALL_OBJECT 99
-
- /********************* object masks for update ************************/
-
- #define M_NONE 0x000
- #define M_POLYLINE_POLYGON 0x001
- #define M_POLYLINE_LINE 0x002
- #define M_POLYLINE_BOX 0x004 /* includes ARCBOX */
- #define M_SPLINE_O_NORMAL 0x008
- #define M_SPLINE_C_NORMAL 0x010
- #define M_SPLINE_O_INTERP 0x020
- #define M_SPLINE_C_INTERP 0x040
- #define M_TEXT_NORMAL 0x080
- #define M_TEXT_HIDDEN 0x100
- #define M_ARC 0x200
- #define M_ELLIPSE 0x400
- #define M_COMPOUND 0x800
-
- #define M_TEXT (M_TEXT_HIDDEN | M_TEXT_NORMAL)
- #define M_SPLINE_O (M_SPLINE_O_NORMAL | M_SPLINE_O_INTERP)
- #define M_SPLINE_C (M_SPLINE_C_NORMAL | M_SPLINE_C_INTERP)
- #define M_SPLINE_NORMAL (M_SPLINE_O_NORMAL | M_SPLINE_C_NORMAL)
- #define M_SPLINE_INTERP (M_SPLINE_O_INTERP | M_SPLINE_C_INTERP)
- #define M_SPLINE (M_SPLINE_NORMAL | M_SPLINE_INTERP)
- #define M_POLYLINE (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_POLYLINE_BOX)
- #define M_VARPTS_OBJECT (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_SPLINE)
- #define M_OPEN_OBJECT (M_POLYLINE_LINE | M_SPLINE_O | M_ARC)
- #define M_ROTATE_ANGLE (M_VARPTS_OBJECT | M_ARC | M_TEXT | M_COMPOUND | M_ELLIPSE)
- #define M_ELLTEXTANGLE (M_ELLIPSE | M_TEXT)
- #define M_OBJECT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_TEXT | M_ARC)
- #define M_NO_TEXT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_COMPOUND | M_ARC)
- #define M_ALL (M_OBJECT | M_COMPOUND)
-
- /************************ Objects **********************/
-
- extern F_compound objects;
-
- /************ global working pointers ************/
-
- extern F_line *cur_l, *new_l, *old_l;
- extern F_arc *cur_a, *new_a, *old_a;
- extern F_ellipse *cur_e, *new_e, *old_e;
- extern F_text *cur_t, *new_t, *old_t;
- extern F_spline *cur_s, *new_s, *old_s;
- extern F_compound *cur_c, *new_c, *old_c;
- extern F_point *first_point, *cur_point;
- extern F_linkinfo *cur_links;
-
- /*************** object attribute settings ***********/
-
- /* Lines */
- extern int cur_linewidth;
- extern int cur_linestyle;
- extern int cur_joinstyle;
- extern int cur_capstyle;
- extern float cur_dashlength;
- extern float cur_dotgap;
- extern float cur_styleval;
- extern Color cur_fillcolor, cur_pencolor;
- extern int cur_fillstyle, cur_penstyle;
- extern int cur_boxradius;
- extern int cur_arrowmode;
- extern int cur_arrowtype;
- extern int cur_arctype;
-
- /* Text */
- extern int cur_fontsize; /* font size */
- extern int cur_latex_font;
- extern int cur_ps_font;
- extern int cur_textjust;
- extern int cur_textflags;
-
- /* Misc */
- extern float cur_elltextangle;
-